package indi.lqzhi.tcpserver.pipeline;

/**
 * @Author: LQZhi
 * @ClassName: Pipeline
 * @Date: 2021-09-29 22-57
 * @Description: 管道接口
 * @Version: V1.0
 */
public interface Pipeline<T> {

    /**
     * 开启总线
     */
    void start();

    /**
     * 销毁总线
     */
    void destory();

    /**
     * 是否运行状态
     * @return true 运行状态 false 停止状态
     */
    boolean hasRunning();

    /**
     * 发送消息给读的管道中
     * @param value 需要发送的值
     * @return true 成功 false 失败
     */
    boolean sendReadMessage(T value);

    /**
     * 发送写的消息给管道中
     * @param value 需要发送的值
     * @return true 成功 false 失败
     */
    boolean sendWriteMessage(T value);

    /**
     * 返回读消息的数量
     * @return 读消息
     */
    long readCount();

    /**
     * 返回写的消息的数量
     * @return 写消息
     */
    long writeCount();

    /**
     * 处理读消息
     * @param value 消息
     */
    T disposeReadMessage(T value);


    /**
     * 处理写消息
     * @param value 消息
     */
    T disposeWriteMessage(T value);
}
